only send the md5 custom checksum header when server expects it
authorMatthieu Gallien <matthieu.gallien@nextcloud.com>
Mon, 31 Mar 2025 09:59:37 +0000 (11:59 +0200)
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>
Thu, 10 Apr 2025 09:31:04 +0000 (09:31 +0000)
server before 32.0.0 release expects a custom header with an MD5
checksum during bulk upload

the header name is: X-File-MD5

see https://github.com/nextcloud/server/pull/51729

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
src/libsync/account.cpp
src/libsync/account.h
src/libsync/bulkpropagatorjob.cpp

index b1fb5a2f4d5df2e57d49328c482558cfd8edb798..fc7af4d1eb0f3283e6b673cef8eaaf74506d21f9 100644 (file)
@@ -796,6 +796,11 @@ int Account::checksumRecalculateServerVersionMinSupportedMajor() const
     return checksumRecalculateRequestServerVersionMinSupportedMajor;
 }
 
+bool Account::bulkUploadNeedsLegacyChecksumHeader() const
+{
+    return serverVersionInt() < makeServerVersion(32, 0, 0);
+}
+
 void Account::setServerVersion(const QString &version)
 {
     if (version == _serverVersion) {
index eddb77c90510a6d5d44ecff25bd8d580ebd63f48..49d9d20e58aedfd1d292d23b77256164b55e4bf6 100644 (file)
@@ -307,6 +307,8 @@ public:
 
     [[nodiscard]] int checksumRecalculateServerVersionMinSupportedMajor() const;
 
+    [[nodiscard]] bool bulkUploadNeedsLegacyChecksumHeader() const;
+
     /** True when the server connection is using HTTP2  */
     bool isHttp2Supported() { return _http2Supported; }
     void setHttp2Supported(bool value) { _http2Supported = value; }
index 9cb7996338056d3325261838a33ca7e70b899d34..7e2154198d88f7598cb52af1f7229bb8606ed0fd 100644 (file)
@@ -188,7 +188,9 @@ void BulkPropagatorJob::doStartUpload(SyncFileItemPtr item,
 
     const auto remotePath = propagator()->fullRemotePath(fileToUpload._file);
 
-    currentHeaders["X-File-MD5"] = md5ChecksumHeader;
+    if (!md5ChecksumHeader.isEmpty()) {
+        currentHeaders["X-File-MD5"] = md5ChecksumHeader;
+    }
     currentHeaders[checkSumHeaderC] = transmissionChecksumHeader;
 
     BulkUploadItem newUploadFile{propagator()->account(), item, fileToUpload,
@@ -281,7 +283,11 @@ void BulkPropagatorJob::slotComputeTransmissionChecksum(SyncFileItemPtr item,
     computeChecksum->setChecksumType(checksumType);
 
     connect(computeChecksum, &ComputeChecksum::done, this, [this, item, fileToUpload] (const QByteArray &contentChecksumType, const QByteArray &contentChecksum) {
-        slotComputeMd5Checksum(item, fileToUpload, contentChecksumType, contentChecksum);
+        if (propagator()->account()->bulkUploadNeedsLegacyChecksumHeader()) {
+            slotComputeMd5Checksum(item, fileToUpload, contentChecksumType, contentChecksum);
+        } else {
+            slotStartUpload(item, fileToUpload, contentChecksumType, contentChecksum, {});
+        }
     });
     connect(computeChecksum, &ComputeChecksum::done, computeChecksum, &QObject::deleteLater);